範圍代表能取用變數的地方,「鏈」是外部環境參照的連結 。
範圍鏈:
當你需要的程式碼無法找到變數,它會到外部環境尋找變數,一路往下找,和函數在哪裡被寫出來無關。
範例1:
執行結果是
1
function b(){
console.log(myVar);
}
function a(){
var myVar=2;
b();
}
var myVar=1;
a();
因為function b和var myVar=1是在同一層
function b和function a不在同一層
範例2:
執行結果是
2
b is not defined
function a(){
function b(){
console.log(myVar);
}
var myVar=2;
b();
}
var myVar=1;
a();
b();
function b在function a裡面,因為b的物理位置在a裡,所以這次的外部詞彙環境是a。
範例3:
執行結果是
1
function a(){
function b(){
console.log(myVar);
}
b();
}
var myVar=1;
a();
因為function b裡沒宣告myVar,所以會先往外到function a找,function a找不到才會往外找,結果是1。
要先創造function a才要會造function b,因為b在a裡面,如果在全域環境呼叫b,不會找到a裡面。